﻿using System.Collections.Generic;

namespace Esponce.QRCode
{
	public class LocationHelper
	{
		/// <summary>
		/// Gets English country name by two-letter country code.
		/// </summary>
		/// <param name="code"></param>
		/// <returns></returns>
		public static string GetCountryName(string code)
		{
			//Unknown country
			if (string.IsNullOrEmpty(code) || code == "--")
			{
				return null;
			}

			//Find name in dictionary
			var countries = Countries;
			if (countries.ContainsKey(code))
			{
				return countries[code];
			}

			//Undefined country
			return null;
		}

		/// <summary>
		/// Gets a list of two-letter country codes and country names in English.
		/// </summary>
		public static Dictionary<string, string> Countries
		{
			get
			{
				if (countries == null)
				{
					var dict = new Dictionary<string, string>();
					dict.Add("EU", "Europe");
					dict.Add("AD", "Andorra");
					dict.Add("AE", "United Arab Emirates");
					dict.Add("AF", "Afghanistan");
					dict.Add("AG", "Antigua and Barbuda");
					dict.Add("AI", "Anguilla");
					dict.Add("AL", "Albania");
					dict.Add("AM", "Armenia");
					dict.Add("AN", "Netherlands Antilles");
					dict.Add("AO", "Angola");
					dict.Add("AQ", "Antarctica");
					dict.Add("AR", "Argentina");
					dict.Add("AS", "American Samoa");
					dict.Add("AT", "Austria");
					dict.Add("AU", "Australia");
					dict.Add("AW", "Aruba");
					dict.Add("AX", "Aland Islands");
					dict.Add("AZ", "Azerbaijan");
					dict.Add("BA", "Bosnia and Herzegovina");
					dict.Add("BB", "Barbados");
					dict.Add("BD", "Bangladesh");
					dict.Add("BE", "Belgium");
					dict.Add("BF", "Burkina Faso");
					dict.Add("BG", "Bulgaria");
					dict.Add("BH", "Bahrain");
					dict.Add("BI", "Burundi");
					dict.Add("BJ", "Benin");
					dict.Add("BL", "Saint Barthelemy");
					dict.Add("BM", "Bermuda");
					dict.Add("BN", "Brunei Darussalam");
					dict.Add("BO", "Bolivia");
					dict.Add("BR", "Brazil");
					dict.Add("BS", "Bahamas");
					dict.Add("BT", "Bhutan");
					dict.Add("BV", "Bouvet Island");
					dict.Add("BW", "Botswana");
					dict.Add("BY", "Belarus");
					dict.Add("BZ", "Belize");
					dict.Add("CA", "Canada");
					dict.Add("CC", "Cocos Islands");
					dict.Add("CD", "Democratic Republic of the Congo");
					dict.Add("CF", "Central African Republic");
					dict.Add("CG", "Republic of the Congo");
					dict.Add("CH", "Switzerland");
					dict.Add("CI", "Cote D'Ivoire");
					dict.Add("CK", "Cook Islands");
					dict.Add("CL", "Chile");
					dict.Add("CM", "Cameroon");
					dict.Add("CN", "China");
					dict.Add("CO", "Colombia");
					dict.Add("CR", "Costa Rica");
					dict.Add("CU", "Cuba");
					dict.Add("CV", "Cape Verde");
					dict.Add("CX", "Christmas Island");
					dict.Add("CY", "Cyprus");
					dict.Add("CZ", "Czech Republic");
					dict.Add("DE", "Germany");
					dict.Add("DJ", "Djibouti");
					dict.Add("DK", "Denmark");
					dict.Add("DM", "Dominica");
					dict.Add("DO", "Dominican Republic");
					dict.Add("DZ", "Algeria");
					dict.Add("EC", "Ecuador");
					dict.Add("EE", "Estonia");
					dict.Add("EG", "Egypt");
					dict.Add("EH", "Western Sahara");
					dict.Add("ER", "Eritrea");
					dict.Add("ES", "Spain");
					dict.Add("ET", "Ethiopia");
					dict.Add("FI", "Finland");
					dict.Add("FJ", "Fiji");
					dict.Add("FK", "Falkland Islands");
					dict.Add("FM", "Micronesia");
					dict.Add("FO", "Faroe Islands");
					dict.Add("FR", "France");
					dict.Add("FX", "France, Metropolitan");
					dict.Add("GA", "Gabon");
					dict.Add("GB", "United Kingdom");
					dict.Add("GD", "Grenada");
					dict.Add("GE", "Georgia");
					dict.Add("GF", "French Guiana");
					dict.Add("GG", "Guernsey");
					dict.Add("GH", "Ghana");
					dict.Add("GI", "Gibraltar");
					dict.Add("GL", "Greenland");
					dict.Add("GM", "Gambia");
					dict.Add("GN", "Guinea");
					dict.Add("GP", "Guadeloupe");
					dict.Add("GQ", "Equatorial Guinea");
					dict.Add("GR", "Greece");
					dict.Add("GS", "South Georgia");
					dict.Add("GT", "Guatemala");
					dict.Add("GU", "Guam");
					dict.Add("GW", "Guinea-Bissau");
					dict.Add("GY", "Guyana");
					dict.Add("HK", "Hong Kong");
					dict.Add("HN", "Honduras");
					dict.Add("HR", "Croatia");
					dict.Add("HT", "Haiti");
					dict.Add("HU", "Hungary");
					dict.Add("ID", "Indonesia");
					dict.Add("IE", "Ireland");
					dict.Add("IL", "Israel");
					dict.Add("IM", "Isle of Man");
					dict.Add("IN", "India");
					dict.Add("IO", "British Indian Ocean Territory");
					dict.Add("IQ", "Iraq");
					dict.Add("IR", "Iran");
					dict.Add("IS", "Iceland");
					dict.Add("IT", "Italy");
					dict.Add("JE", "Jersey");
					dict.Add("JM", "Jamaica");
					dict.Add("JO", "Jordan");
					dict.Add("JP", "Japan");
					dict.Add("KE", "Kenya");
					dict.Add("KG", "Kyrgyzstan");
					dict.Add("KH", "Cambodia");
					dict.Add("KI", "Kiribati");
					dict.Add("KM", "Comoros");
					dict.Add("KN", "Saint Kitts and Nevis");
					dict.Add("KP", "North Korea");
					dict.Add("KR", "South Korea");
					dict.Add("KW", "Kuwait");
					dict.Add("KY", "Cayman Islands");
					dict.Add("KZ", "Kazakhstan");
					dict.Add("LA", "Laos");
					dict.Add("LB", "Lebanon");
					dict.Add("LC", "Saint Lucia");
					dict.Add("LI", "Liechtenstein");
					dict.Add("LK", "Sri Lanka");
					dict.Add("LR", "Liberia");
					dict.Add("LS", "Lesotho");
					dict.Add("LT", "Lithuania");
					dict.Add("LU", "Luxembourg");
					dict.Add("LV", "Latvia");
					dict.Add("LY", "Libya");
					dict.Add("MA", "Morocco");
					dict.Add("MC", "Monaco");
					dict.Add("MD", "Moldova");
					dict.Add("ME", "Montenegro");
					dict.Add("MF", "Saint Martin");
					dict.Add("MG", "Madagascar");
					dict.Add("MH", "Marshall Islands");
					dict.Add("MK", "Macedonia");
					dict.Add("ML", "Mali");
					dict.Add("MM", "Myanmar");
					dict.Add("MN", "Mongolia");
					dict.Add("MO", "Macau");
					dict.Add("MP", "Northern Mariana Islands");
					dict.Add("MQ", "Martinique");
					dict.Add("MR", "Mauritania");
					dict.Add("MS", "Montserrat");
					dict.Add("MT", "Malta");
					dict.Add("MU", "Mauritius");
					dict.Add("MV", "Maldives");
					dict.Add("MW", "Malawi");
					dict.Add("MX", "Mexico");
					dict.Add("MY", "Malaysia");
					dict.Add("MZ", "Mozambique");
					dict.Add("NA", "Namibia");
					dict.Add("NC", "New Caledonia");
					dict.Add("NE", "Niger");
					dict.Add("NF", "Norfolk Island");
					dict.Add("NG", "Nigeria");
					dict.Add("NI", "Nicaragua");
					dict.Add("NL", "Netherlands");
					dict.Add("NO", "Norway");
					dict.Add("NP", "Nepal");
					dict.Add("NR", "Nauru");
					dict.Add("NU", "Niue");
					dict.Add("NZ", "New Zealand");
					dict.Add("OM", "Oman");
					dict.Add("PA", "Panama");
					dict.Add("PE", "Peru");
					dict.Add("PF", "French Polynesia");
					dict.Add("PG", "Papua New Guinea");
					dict.Add("PH", "Philippines");
					dict.Add("PK", "Pakistan");
					dict.Add("PL", "Poland");
					dict.Add("PM", "Saint Pierre and Miquelon");
					dict.Add("PN", "Pitcairn");
					dict.Add("PR", "Puerto Rico");
					dict.Add("PS", "Palestinian Territory");
					dict.Add("PT", "Portugal");
					dict.Add("PW", "Palau");
					dict.Add("PY", "Paraguay");
					dict.Add("QA", "Qatar");
					dict.Add("RO", "Romania");
					dict.Add("RS", "Serbia");
					dict.Add("RU", "Russia");
					dict.Add("RW", "Rwanda");
					dict.Add("SA", "Saudi Arabia");
					dict.Add("SB", "Solomon Islands");
					dict.Add("SC", "Seychelles");
					dict.Add("SD", "Sudan");
					dict.Add("SE", "Sweden");
					dict.Add("SG", "Singapore");
					dict.Add("SH", "Saint Helena");
					dict.Add("SI", "Slovenia");
					dict.Add("SJ", "Svalbard and Jan Mayen");
					dict.Add("SK", "Slovakia");
					dict.Add("SL", "Sierra Leone");
					dict.Add("SM", "San Marino");
					dict.Add("SN", "Senegal");
					dict.Add("SO", "Somalia");
					dict.Add("SR", "Suriname");
					dict.Add("ST", "Sao Tome and Principe");
					dict.Add("SV", "El Salvador");
					dict.Add("SY", "Syria");
					dict.Add("SZ", "Swaziland");
					dict.Add("TC", "Turks and Caicos Islands");
					dict.Add("TD", "Chad");
					dict.Add("TF", "French Southern Territories");
					dict.Add("TG", "Togo");
					dict.Add("TH", "Thailand");
					dict.Add("TJ", "Tajikistan");
					dict.Add("TK", "Tokelau");
					dict.Add("TM", "Turkmenistan");
					dict.Add("TN", "Tunisia");
					dict.Add("TO", "Tonga");
					dict.Add("TL", "Timor-Leste");
					dict.Add("TR", "Turkey");
					dict.Add("TT", "Trinidad and Tobago");
					dict.Add("TV", "Tuvalu");
					dict.Add("TW", "Taiwan");
					dict.Add("TZ", "Tanzania");
					dict.Add("UA", "Ukraine");
					dict.Add("UG", "Uganda");
					dict.Add("UM", "United States");
					dict.Add("US", "United States");
					dict.Add("UY", "Uruguay");
					dict.Add("UZ", "Uzbekistan");
					dict.Add("VA", "Vatican");
					dict.Add("VC", "Saint Vincent and the Grenadines");
					dict.Add("VE", "Venezuela");
					dict.Add("VG", "British Virgin Islands");
					dict.Add("VI", "US Virgin Islands");
					dict.Add("VN", "Vietnam");
					dict.Add("VU", "Vanuatu");
					dict.Add("WF", "Wallis and Futuna");
					dict.Add("WS", "Samoa");
					dict.Add("YE", "Yemen");
					dict.Add("YT", "Mayotte");
					dict.Add("ZA", "South Africa");
					dict.Add("ZM", "Zambia");
					dict.Add("ZW", "Zimbabwe");
					countries = dict;
				}
				return countries;
			}
		}

		private static Dictionary<string, string> countries;
	}
}
